home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byt86jun.arc / MIDI.ARC / LIST7.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1980-01-01  |  1.6 KB  |  67 lines

  1.  
  2. { Return offset of MIDI velocity data in 
  3.   Track Event message, if present
  4. }
  5. function midi_vel_offset(eblk:track_event_block; 
  6.              chan:byte):integer;
  7. var
  8.   offset : integer;
  9. begin
  10. midi_vel_offset:=ERR;  { default return value }
  11.      { only MIDI key events have velocity }
  12. offset:=midi_key_offset(eblk,chan);  
  13. if (offset <> ERR) then
  14.    midi_vel_offset:=offset+1;
  15. end;
  16.  
  17. { Return MIDI velocity data from Track Event, if present
  18. }
  19. function get_midi_vel(eblk:track_event_block; 
  20.               chan:byte):integer;
  21. var
  22.   vel_offset : integer;
  23. begin
  24. get_midi_vel:=ERR;  { default return value }
  25. vel_offset:=midi_vel_offset(eblk,chan);
  26. if (vel_offset <> ERR) then
  27.   get_midi_vel:=eblk.event.mess[vel_offset];
  28. end;
  29.  
  30. { Set MIDI velocity value in Track Event, 
  31.   if Track Event is of appropriate type
  32. }
  33. procedure set_midi_vel(var eblk:track_event_block; 
  34.                chan,vel:integer);
  35. var
  36.   vel_offset : integer;
  37. begin
  38. vel_offset:=midi_vel_offset(eblk,chan);
  39. if (vel_offset <> ERR) then
  40.   eblk.event.mess[vel_offset]:=vel;
  41. end;
  42.  
  43. { Scale all MIDI velocity data for 
  44.   a channel in a Track Data block
  45. }
  46. procedure scale_vel(var tdi,tdo:track_data_block; 
  47.             chan:integer; vel_fact:real);
  48. var
  49.   curr_vel : integer;  
  50. begin
  51. reset_track_data(tdi);
  52. reset_track_data(tdo);
  53. while not(tdi.edat) do
  54.   begin
  55.   next_track_event(tdi);
  56.   curr_vel:=get_midi_vel(tdi.curr,chan);
  57.   if (curr_vel <> ERR) then
  58.     set_midi_vel(tdi.curr,chan,trunc(curr_vel*vel_fact));
  59.   store_track_event(tdo,tdi.curr);
  60.   end;
  61. end;
  62.  
  63. l <> ERR) then
  64.     set_midi_vel(tdi.curr,chan,trunc(curr_vel*vel_fact));
  65.   store_track_event(tdo,tdi.curr);
  66.   end;
  67. e